/**
 * Classe de configuration d'une partie
 * @author Lo�c Mounier, Thomas Picard, Marianne Grandemenge
 */

package modele;

import java.awt.Color;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.ArrayList;

import codebase.IPartie;

public class Configuration implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int nbJoueurs;
	private int nbCentresRavitallementVictoire;
	private int dureePartieTps;
	private int dureePartieNbAnnees;
	private int dureeNegociations;
	private int dureeOrdres;
	private int dureeDispersions;
	private ArrayList<ArrayList<Puissance>> groupePuissance;

	public final static int MIN_NBJOUEURS = 2;
	public final static int DEFAUT_NBJOUEURS = 7;
	public final static int MAX_NBJOUEURS = 7;
	public final static int MIN_CENTRES_RAVITALLEMENT_VICTOIRE = 10;
	public final static int DEFAUT_CENTRES_RAVITALLEMENT_VICTOIRE = 18;
	public final static int MAX_CENTRES_RAVITALLEMENT_VICTOIRE = 34;
	public final static int MIN_DUREE_PARTIE_TPS = 60;
	public final static int DEFAUT_DUREE_PARTIE_TPS = 360;
	public final static int MAX_DUREE_PARTIE_TPS = 600;
	public final static int MIN_DUREE_PARTIE_NBANNEES = 1;
	public final static int DEFAUT_DUREE_PARTIE_NBANNEES = 7;
	public final static int MAX_DUREE_PARTIE_NBANNEES = 15;
	public final static int MIN_DUREE_NEGOCIATIONS = 1;
	public final static int DEFAUT_DUREE_NEGOCIATIONS = 15;
	public final static int MAX_DUREE_NEGOCIATIONS = 30;
	public final static int MIN_DUREE_ORDRES = 1;
	public final static int DEFAUT_DUREE_ORDRES = 3;
	public final static int MAX_DUREE_ORDRES = 10;
	public final static int MIN_DUREE_DISPERSIONS = 1;
	public final static int DEFAUT_DUREE_DISPERSIONS = 1;
	public final static int MAX_DUREE_DISPERSIONS = 5;
	public final static int PORT_CONNEXION = 5000;
	public final static String ADRESSE_CONNEXION = "224.0.0.42";

	/**
	 * Configuration par defaut.
	 * 
	 * @throws RemoteException
	 */
	public Configuration() throws RemoteException {
		this.nbJoueurs = DEFAUT_NBJOUEURS;
		this.nbCentresRavitallementVictoire = DEFAUT_CENTRES_RAVITALLEMENT_VICTOIRE;
		this.dureePartieTps = DEFAUT_DUREE_PARTIE_TPS;
		this.dureePartieNbAnnees = DEFAUT_DUREE_PARTIE_NBANNEES;
		this.dureeNegociations = DEFAUT_DUREE_NEGOCIATIONS;
		this.dureeOrdres = DEFAUT_DUREE_ORDRES;
		this.dureeDispersions = DEFAUT_DUREE_DISPERSIONS;
		groupePuissance = new ArrayList<ArrayList<Puissance>>();
		initListePuissance(nbJoueurs);
	}

	/**
	 * Configuration personnalisée.
	 * 
	 * @param nbJoueurs
	 *            Nombre de joueurs dans la partie
	 * @param nbCentresRavitallementVictoire
	 *            Nombre de centres de ravitallement qu'il faut contrôler pour
	 *            gagner la partie
	 * @param dureePartieTps
	 *            Durée de la partie en temps (minutes)
	 * @param dureePartieNbAnnees
	 *            Durée de la partie en nombre d'années
	 * @param dureeNegociations
	 *            Durée de la phase de négociations (minutes)
	 * @param dureeOrdres
	 *            Durée de la phase de rédaction des ordres (minutess)
	 * @param dureeDispersions
	 *            Durée de la phase de dispersions (minutess)
	 * @throws RemoteException
	 */
	public Configuration(int nbJoueurs, int nbCentresRavitallementVictoire, int dureePartieTps,
			int dureePartieNbAnnees, int dureeNegociations, int dureeOrdres, int dureeDispersions)
			throws RemoteException {
		this.nbJoueurs = nbJoueurs;
		this.nbCentresRavitallementVictoire = nbCentresRavitallementVictoire;
		this.dureePartieTps = dureePartieTps;
		this.dureePartieNbAnnees = dureePartieNbAnnees;
		this.dureeNegociations = dureeNegociations;
		this.dureeOrdres = dureeOrdres;
		this.dureeDispersions = dureeDispersions;
		initListePuissance(nbJoueurs);
	}

	public int getNbJoueurs() {
		return nbJoueurs;
	}

	public void setNbJoueurs(int nbJoueurs) {
		this.nbJoueurs = nbJoueurs;
	}

	public int getNbCentresRavitallementVictoire() {
		return nbCentresRavitallementVictoire;
	}

	public void setNbCentresRavitallementVictoire(int nbCentresRavitallementVictoire) {
		this.nbCentresRavitallementVictoire = nbCentresRavitallementVictoire;
	}

	public int getDureePartieTps() {
		return dureePartieTps;
	}

	public void setDureePartieTps(int dureePartieTps) {
		this.dureePartieTps = dureePartieTps;
	}

	public int getDureePartieNbAnnees() {
		return dureePartieNbAnnees;
	}

	public void setDureePartieNbAnnees(int dureePartieNbAnnees) {
		this.dureePartieNbAnnees = dureePartieNbAnnees;
	}

	public int getDureeNegociations() {
		return dureeNegociations;
	}

	public void setDureeNegociations(int dureeNegociations) {
		this.dureeNegociations = dureeNegociations;
	}

	public int getDureeOrdres() {
		return dureeOrdres;
	}

	public void setDureeOrdres(int dureeOrdres) {
		this.dureeOrdres = dureeOrdres;
	}

	public int getDureeDispersions() {
		return dureeDispersions;
	}

	public void setDureeDispersions(int dureeDispersions) {
		this.dureeDispersions = dureeDispersions;
	}

	public void suprimeRegionDepart() {
		for (ArrayList<Puissance> array : groupePuissance) {
			for (Puissance puissance : array) {
				puissance.nettoieCarte();

			}
		}

	}

	public void initListePuissance(int nbJoueur) throws RemoteException {
		suprimeRegionDepart();

		ArrayList<ArrayList<Puissance>> l = new ArrayList<ArrayList<Puissance>>();
		ArrayList<Puissance> f = new ArrayList<Puissance>();
		ArrayList<Puissance> a = new ArrayList<Puissance>();
		ArrayList<Puissance> t = new ArrayList<Puissance>();
		ArrayList<Puissance> r = new ArrayList<Puissance>();
		ArrayList<Puissance> d = new ArrayList<Puissance>();
		ArrayList<Puissance> g = new ArrayList<Puissance>();
		ArrayList<Puissance> i = new ArrayList<Puissance>();
		switch (nbJoueur) {
		case 6:
			f.add(new Puissance("France", "FR", Color.blue, "icone_soldat_fr.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("par"),
					IPartie.carte.getRegion("mar"), IPartie.carte.getRegion("bre")));
			a.add(new Puissance("Autriche - Hongrie", "AH", Color.red, "icone_soldat_ah.png",
					new char[] { 'a', 'a', 'f' }, IPartie.carte.getRegion("vie"), IPartie.carte
							.getRegion("bud"), IPartie.carte.getRegion("tri")));
			t.add(new Puissance("Turquie", "TU", Color.yellow, "icone_soldat_tur.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("con"),
					IPartie.carte.getRegion("smy"), IPartie.carte.getRegion("ank")));
			r.add(new Puissance("Russie", "RU", Color.gray, "icone_soldat_russ.png", new char[] {
					'a', 'a', 'f', 'f' }, IPartie.carte.getRegion("mos"), IPartie.carte
					.getRegion("var"), IPartie.carte.getRegion("seb"), IPartie.carte
					.getRegion("stp")));
			d.add(new Puissance("Allemagne", "AL", Color.black, "icone_soldat_all.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("ber"),
					IPartie.carte.getRegion("mun"), IPartie.carte.getRegion("kie")));
			g.add(new Puissance("Grande Bretagne", "GB", Color.pink, "icone_soldat_an.png",
					new char[] { 'a', 'f', 'f' }, IPartie.carte.getRegion("lpl"), IPartie.carte
							.getRegion("edi"), IPartie.carte.getRegion("lon")));
			l.add(f);
			l.add(a);
			l.add(t);
			l.add(r);
			l.add(d);
			l.add(g);
			break;
		case 5:
			f.add(new Puissance("France", "FR", Color.blue, "icone_soldat_fr.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("par"),
					IPartie.carte.getRegion("mar"), IPartie.carte.getRegion("bre")));
			a.add(new Puissance("Autriche - Hongrie", "AH", Color.red, "icone_soldat_ah.png",
					new char[] { 'a', 'a', 'f' }, IPartie.carte.getRegion("vie"), IPartie.carte
							.getRegion("bud"), IPartie.carte.getRegion("tri")));
			t.add(new Puissance("Turquie", "TU", Color.yellow, "icone_soldat_tur.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("con"),
					IPartie.carte.getRegion("smy"), IPartie.carte.getRegion("ank")));
			r.add(new Puissance("Russie", "RU", Color.gray, "icone_soldat_russ.png", new char[] {
					'a', 'a', 'f', 'f' }, IPartie.carte.getRegion("mos"), IPartie.carte
					.getRegion("var"), IPartie.carte.getRegion("seb"), IPartie.carte
					.getRegion("stp")));
			g.add(new Puissance("Grande Bretagne", "GB", Color.pink, "icone_soldat_an.png",
					new char[] { 'a', 'f', 'f' }, IPartie.carte.getRegion("lpl"), IPartie.carte
							.getRegion("edi"), IPartie.carte.getRegion("lon")));
			l.add(f);
			l.add(a);
			l.add(t);
			l.add(r);
			l.add(g);
			break;
		case 4:
			g.add(new Puissance("Grande Bretagne", "GB", Color.pink, "icone_soldat_an.png",
					new char[] { 'a', 'f', 'f' }, IPartie.carte.getRegion("lpl"), IPartie.carte
							.getRegion("edi"), IPartie.carte.getRegion("lon")));
			a.add(new Puissance("France", "FR", Color.blue, "icone_soldat_fr.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("par"),
					IPartie.carte.getRegion("mar"), IPartie.carte.getRegion("bre")));
			a.add(new Puissance("Autriche - Hongrie", "AH", Color.red, "icone_soldat_ah.png",
					new char[] { 'a', 'a', 'f' }, IPartie.carte.getRegion("vie"), IPartie.carte
							.getRegion("bud"), IPartie.carte.getRegion("tri")));
			d.add(new Puissance("Allemagne", "AL", Color.black, "icone_soldat_all.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("ber"),
					IPartie.carte.getRegion("mun"), IPartie.carte.getRegion("kie")));
			d.add(new Puissance("Turquie", "TU", Color.yellow, "icone_soldat_tur.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("con"),
					IPartie.carte.getRegion("smy"), IPartie.carte.getRegion("ank")));
			i.add(new Puissance("Italie", "IT", Color.green, "icone_soldat_it.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("rom"),
					IPartie.carte.getRegion("ven"), IPartie.carte.getRegion("nap")));
			i.add(new Puissance("Russie", "RU", Color.gray, "icone_soldat_russ.png", new char[] {
					'a', 'a', 'f', 'f' }, IPartie.carte.getRegion("mos"), IPartie.carte
					.getRegion("var"), IPartie.carte.getRegion("seb"), IPartie.carte
					.getRegion("stp")));
			l.add(g);
			l.add(a);
			l.add(d);
			l.add(i);
			break;
		case 3:
			g.add(new Puissance("Grande Bretagne", "GB", Color.pink, "icone_soldat_an.png",
					new char[] { 'a', 'f', 'f' }, IPartie.carte.getRegion("lpl"), IPartie.carte
							.getRegion("edi"), IPartie.carte.getRegion("lon")));
			g.add(new Puissance("Allemagne", "AL", Color.black, "icone_soldat_all.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("ber"),
					IPartie.carte.getRegion("mun"), IPartie.carte.getRegion("kie")));
			g.add(new Puissance("Autriche - Hongrie", "AH", Color.red, "icone_soldat_ah.png",
					new char[] { 'a', 'a', 'f' }, IPartie.carte.getRegion("vie"), IPartie.carte
							.getRegion("bud"), IPartie.carte.getRegion("tri")));
			r.add(new Puissance("Italie", "IT", Color.green, "icone_soldat_it.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("rom"),
					IPartie.carte.getRegion("ven"), IPartie.carte.getRegion("nap")));
			r.add(new Puissance("Russie", "RU", Color.gray, "icone_soldat_russ.png", new char[] {
					'a', 'a', 'f', 'f' }, IPartie.carte.getRegion("mos"), IPartie.carte
					.getRegion("var"), IPartie.carte.getRegion("seb"), IPartie.carte
					.getRegion("stp")));
			f.add(new Puissance("France", "FR", Color.blue, "icone_soldat_fr.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("par"),
					IPartie.carte.getRegion("mar"), IPartie.carte.getRegion("bre")));
			f.add(new Puissance("Turquie", "TU", Color.yellow, "icone_soldat_tur.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("con"),
					IPartie.carte.getRegion("smy"), IPartie.carte.getRegion("ank")));
			l.add(f);
			l.add(r);
			l.add(g);
			break;
		case 2:
			g.add(new Puissance("Grande Bretagne", "GB", Color.pink, "icone_soldat_an.png",
					new char[] { 'a', 'f', 'f' }, IPartie.carte.getRegion("lpl"), IPartie.carte
							.getRegion("edi"), IPartie.carte.getRegion("lon")));
			g.add(new Puissance("France", "FR", Color.blue, "icone_soldat_fr.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("par"),
					IPartie.carte.getRegion("mar"), IPartie.carte.getRegion("bre")));
			g.add(new Puissance("Russie", "RU", Color.gray, "icone_soldat_russ.png", new char[] {
					'a', 'a', 'f', 'f' }, IPartie.carte.getRegion("mos"), IPartie.carte
					.getRegion("var"), IPartie.carte.getRegion("seb"), IPartie.carte
					.getRegion("stp")));
			a.add(new Puissance("Allemagne", "AL", Color.black, "icone_soldat_all.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("ber"),
					IPartie.carte.getRegion("mun"), IPartie.carte.getRegion("kie")));
			a.add(new Puissance("Autriche - Hongrie", "AH", Color.red, "icone_soldat_ah.png",
					new char[] { 'a', 'a', 'f' }, IPartie.carte.getRegion("vie"), IPartie.carte
							.getRegion("bud"), IPartie.carte.getRegion("tri")));
			a.add(new Puissance("Turquie", "TU", Color.yellow, "icone_soldat_tur.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("con"),
					IPartie.carte.getRegion("smy"), IPartie.carte.getRegion("ank")));
			l.add(a);
			l.add(g);
			break;
		default:
			// 7 joueurs

			f.add(new Puissance("France", "FR", Color.blue, "icone_soldat_fr.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("par"),
					IPartie.carte.getRegion("mar"), IPartie.carte.getRegion("bre")));
			a.add(new Puissance("Autriche - Hongrie", "AH", Color.red, "icone_soldat_ah.png",
					new char[] { 'a', 'a', 'f' }, IPartie.carte.getRegion("vie"), IPartie.carte
							.getRegion("bud"), IPartie.carte.getRegion("tri")));
			t.add(new Puissance("Turquie", "TU", Color.yellow, "icone_soldat_tur.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("con"),
					IPartie.carte.getRegion("smy"), IPartie.carte.getRegion("ank")));
			r.add(new Puissance("Russie", "RU", Color.gray, "icone_soldat_russ.png", new char[] {
					'a', 'a', 'f', 'f' }, IPartie.carte.getRegion("mos"), IPartie.carte
					.getRegion("var"), IPartie.carte.getRegion("seb"), IPartie.carte
					.getRegion("stp")));
			d.add(new Puissance("Allemagne", "AL", Color.black, "icone_soldat_all.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("ber"),
					IPartie.carte.getRegion("mun"), IPartie.carte.getRegion("kie")));
			g.add(new Puissance("Grande Bretagne", "GB", Color.pink, "icone_soldat_an.png",
					new char[] { 'a', 'f', 'f' }, IPartie.carte.getRegion("lpl"), IPartie.carte
							.getRegion("edi"), IPartie.carte.getRegion("lon")));
			i.add(new Puissance("Italie", "IT", Color.green, "icone_soldat_it.png", new char[] {
					'a', 'a', 'f' }, IPartie.carte.getRegion("rom"),
					IPartie.carte.getRegion("ven"), IPartie.carte.getRegion("nap")));
			l.add(f);
			l.add(a);
			l.add(t);
			l.add(r);
			l.add(d);
			l.add(g);
			l.add(i);
			break;
		}
		groupePuissance = l;
	}

	public ArrayList<ArrayList<Puissance>> getListePuissance() {
		return groupePuissance;
	}
}
